package top.lcm889.juc.demo;

/**
 * @author Coder-lcm
 * @date 2021/4/10
 *     Thread提供了让一个线程等待另一个线程完成的方法: join方法。当在某个程序执行流中调用
 * 其他线程的 join方法时,调用线程将被阻塞,直到被join方法加入的join线程完成为止。
 *     join方法通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程。
 * 当所有的小问题都得到处理后,再调用主线程来进一步操作。
 *
 */
public class JoinThread extends Thread{
    public JoinThread(String name) {
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName() + " " + i);
        }
    }

    public static void main(String[] args) throws InterruptedException {
        new JoinThread("新线程").start();
        for (int i = 0; i < 100; i++) {
            if (i == 20) {
                JoinThread jt = new JoinThread("被 join的线程");
                jt.start();
                 // main方法调用了jt线程的join方法
                 // 结果就是main方法必须等jt线程执行结束才会往下执行
//                jt.join();
                jt.join(2);//被join线程如果超过参数指定的毫秒时间还没执行完，则等待join的线程就不再等待，即继续执行
            }
            System.out.println(Thread.currentThread().getName() + " " + i);
        }
    }
}
